package cn.com.connext.scrm.utils;

import org.apache.commons.lang3.Validate;
import org.joda.time.DateTime;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import java.util.TimeZone;

public class DateUtils {
    //获取系统当前时间Date类型，需要将字符串类型转成时间
    public static Date getDaDate(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//设置为东八区
        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        Date date = new Date();
        String dateStr = sdf.format(date);

//将字符串转成时间
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date newDate=null;
        try {
            newDate = df.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return newDate;
    }
    /**
     * 转换为ZonedDateTime，时区为系统默认时区
     * @param date
     * @return
     */
    public static ZonedDateTime toZonedDateTime(Date date) {
        Objects.requireNonNull(date, "date");
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime()
            .atZone(ZoneId.systemDefault());
    }



    public static Date getParamDate(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//设置为东八区
        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        String dateStr = sdf.format(date);

//将字符串转成时间
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date newDate=null;
        try {
            newDate = df.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return newDate;
    }

    /**
     * 转换格式
     * @param date
     * @return
     */
    public static String getStringToYYYYMMDD(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
       return sdf.format(date);
    }


    /**
     * 格式化传入时间为 yyyy-mm-dd
     * 进行对比，大于1 等于0  小于-1
     * 返回两个日期的时间天数查
     * @param date
     * @return
     */
    public static int timeToCompare(Date date){
        Validate.notNull(date);
        Date dateStart = toDateFormattingYYYYMMDD(new Date());
        Date dateEnd = toDateFormattingYYYYMMDD(date);
        int i = new DateTime(dateStart).toLocalDate().compareTo(new DateTime(dateEnd).toLocalDate());
        return i;
    }

    public static Date toDateFormattingYYYYMMDD(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String format = sdf.format(date);
        try {
            Date parse = sdf.parse(format);
            return parse;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Date toDateFormattingYYYYMMDDTSS(String date){
        //2019-12-17T10:35:53+08:00
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        String format = sdf.format(date);
        try {
            Date parse = sdf.parse(format);
            return parse;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将传入的日期的年月得到一个值
     * @param date 日期
     * @return 获取一个唯一的年月数值
     */
    public static int getYearMonth(Date date){
        //传入日期
        Calendar calder = Calendar.getInstance();
        calder.setTime(date);//设置时间
        int year = calder.get(Calendar.YEAR);//获取年份
        int month=calder.get(Calendar.MONTH);//获取月份
        //返回年份乘以100加上月份的值，因为月份最多2位数，
        // 所以年份乘以100可以获取一个唯一的年月数值
        return year*100+month;
    }
    /**
     * 将传入的日期的年得到一个值
     * @param date 日期
     * @return 获取一个唯一的年数值
     */
    public static int getYear(Date date){
        //传入日期
        Calendar calder = Calendar.getInstance();
        calder.setTime(date);//设置时间
        int year = calder.get(Calendar.YEAR);//获取年份
        return year;
    }
//
//    public static void main(String[] args) {
//        Calendar instance = Calendar.getInstance();
//        instance.set(2021,8,31);
//        Date time = instance.getTime();
//        System.out.println( timeToCompare(time));
//    }

}

